package com.peter.website.controller;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.peter.data.entity.Idea;
import com.peter.data.entity.IdeaTag;
import com.peter.store.idea.IdeaRepository;
import com.peter.store.idea.TagRepository;

import lombok.extern.slf4j.Slf4j;

/**
 * @author peter
 *
 */
@RestController
@Slf4j
@RequestMapping("/rest/tag")
public class TagController {
    @Autowired
    private IdeaRepository ideaRepository;
    @Autowired
    private TagRepository tagRepository;

    // MEMO 通过get方式的"?key=value"的方式传递参数。
    @GetMapping("/list")
    public List<IdeaTag> list() {
        List<IdeaTag> tags = new ArrayList<IdeaTag>();
        Iterable<IdeaTag> iterator = tagRepository.findAll();

        // MEMO 通过注解 ``@Slf4j`` 可以直接使用 ``log`` 对象。
        log.info("进入该方法。");

        for(IdeaTag tag: iterator) {
            tags.add(tag);
        }

        return tags;
    }

    // MEMO 通过get的"/path/{value}"方式传递参数。
    @GetMapping("/info/{id}")
    public IdeaTag info(@PathVariable(name = "id", required = false) String id, Model model) {
        Optional<IdeaTag> tags = tagRepository.findById(Long.parseLong(id));
        // MEMO Optional.get()之前需要判断是否为空，否则会报错。

        return tags.isEmpty() ? null : tags.get();
    }

    // MEMO 通过Post方式传递的json参数。
    @RequestMapping(path = "/add", method = {RequestMethod.POST, RequestMethod.PUT})
    public Boolean add(@RequestBody @Valid IdeaTag ideaTag) {
        tagRepository.save(ideaTag);
        return true;
    }

    // MEMO 通过Post方式传递的json参数。
    @RequestMapping(path = "/test", method = {RequestMethod.POST, RequestMethod.PUT, RequestMethod.GET})
    public Integer test() {
        return 1;
    }
}
